package com.example.kugou.common.music;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.List;

public abstract class MusicUtile {

    /**
     * 依据原始文件名生成新文件名
     *
     * @return
     */
    static String getfileName(String filePath) {
        String newFilePath = filePath.substring(filePath.lastIndexOf("\\") + 1);
        return newFilePath;
    }


    /**
     * qian等于0，表示歌手在前面
     * 等于1表示歌手在后面
     * @param fileName
     * @param qian
     * @return
     */
    public static Music getName(String fileName,int qian){
        String[] strings = fileName.split("-");
        Music music = new Music();
        if (strings.length >= 2){
            if(qian == 0){
                music.setArtist(strings[0].trim());
                music.setSongName(strings[1].trim());
            }else {
                music.setArtist(strings[1].trim());
                music.setSongName(strings[0].trim());
            }
        }else {
            return null;
        }
        return music;
    }

    /**
     *
     * @param filePath
     * @param end
     * @return
     */
    static String getlrcName(String filePath,String end,String fileName) {
        String newFileName = filePath.substring(filePath.lastIndexOf("\\") + 1 , filePath.lastIndexOf("."));
        if (fileName.equals(newFileName)){
            fileName = fileName + "."  + "json";
            return fileName;
        }
        return null;
    }



    /**
     * 删除指定文件夹下所有文件
     *
     * @param path 文件夹完整绝对路径
     * @return
     */
    public static boolean delAllFile(String path) {
        boolean flag = false;
        File file = new File(path);
        if (!file.exists()) {
            return flag;
        }
        if (!file.isDirectory()) {
            return flag;
        }
        String[] tempList = file.list();
        File temp = null;
        for (int i = 0; i < tempList.length; i++) {
            if (path.endsWith(File.separator)) {
                temp = new File(path + tempList[i]);
            } else {
                temp = new File(path + File.separator + tempList[i]);
            }
            if (temp.isFile()) {
                temp.delete();
            }
            if (temp.isDirectory()) {
                delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
                delFolder(path + "/" + tempList[i]);// 再删除空文件夹
                flag = true;
            }
        }
        return flag;
    }


    /**
     * 删除文件夹
     *
     * @param folderPath 文件夹完整绝对路径
     */

    public static void delFolder(String folderPath) {
        try {
            delAllFile(folderPath); // 删除完里面所有内容
            String filePath = folderPath;
            filePath = filePath;
            java.io.File myFilePath = new java.io.File(filePath);
            myFilePath.delete(); // 删除空文件夹
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建文件夹
     * @param path
     * @param filename
     * @return
     */
    public static boolean createFile(String path, String filename) {
        File file = new File(path, filename);
        if (file.exists()) {
            System.out.println("文件已存在!");
            System.out.println(file.length());
        } else {
            try {
                file.createNewFile();
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("文件创建失败");
                return false;
            }
        }
        return true;
    }


    /**
     * 给一个文件的绝对路径
     *
     * @param mp3
     * @return
     * @throws Exception
     */
    public static Music getMusicInfo(String mp3) throws Exception {
        Music music = new Music();
//        读入一个MP3文件的TAG_V1部分信息：
        byte[] buf = new byte[128];//初始化标签信息的byte数组
        RandomAccessFile raf = null;
        try {
            //随机读写方式打开MP3文件
            raf = new RandomAccessFile(mp3, "r");
            //移动到文件MP3末尾
            raf.seek(raf.length() - 128);
            raf.read(buf);//读取标签信息
            raf.close();//关闭文件
            if (buf.length != 128) {//数据长度是否合法
                throw new Exception("MP3标签信息数据长度不合法!");
            }
            if (!"TAG".equalsIgnoreCase(new String(buf, 0, 3))) {//标签头是否存在
                throw new Exception("MP3标签信息数据格式不正确!");
            }

//        获得TAG_V1中的各个内容：
            String SongName = new String(buf, 3, 30, StandardCharsets.UTF_8).trim();//歌曲名称
            String Artist = new String(buf, 33, 30, StandardCharsets.UTF_8).trim();//歌手名字
            String Album = new String(buf, 63, 30, StandardCharsets.UTF_8).trim();//专辑名称

            String Year = new String(buf, 93, 4, StandardCharsets.UTF_8).trim();//出品年份

            String Comment = new String(buf, 97, 28, StandardCharsets.UTF_8).trim();//备注信息
            music.setSongName(SongName);
            music.setArtist(Artist);
            music.setAlbum(Album);
            music.setYear(Year);
            music.setComment(Comment);
        } catch (IOException e) {
            e.printStackTrace();
            music = new Music(MusicUtile.getfileName(mp3), "未命名", "", "未知年份", "没有描述");
        }
        System.out.println(music);
        return music;
    }


    /**
     * 将文件复制到其他的路径
     *
     * @param oldfile 原路径
     * @param newfile 新路径
     */
    public static void copyFile(String oldfile, String newfile) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
//旧的文件路径
            fis = new FileInputStream(oldfile);
//新的文件路径
            fos = new FileOutputStream(newfile);
            byte[] bytes = new byte[1024];
            int n = 0;
            while ((n = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, n);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
